package com.zb.code.service;

import com.zb.entity.AccounLoginInfo;
import com.zb.entity.CodeParamInfo;
import com.zb.entity.ZjCode;
import com.zb.result.PageUtil;
import com.zb.vo.*;

import java.util.List;
import java.util.Map;

/**
 * @Author WEN
 * @Date 2023/8/23 0023
 **/
public interface ConCodeService {
    /**
     * 新增编码
     * @param loginInfo 登录信息
     * @param codeBatchVo 创建编码数据对象
     * @param codeParamInfo 编码参数信息
     */
    void save(AccounLoginInfo loginInfo, CodeBatchVo codeBatchVo, CodeParamInfo codeParamInfo);

    /**
     * 查询编码列表详情
     * @param id 编码ID
     * @return
     */
    CodeDetailVo getInfo(Long id);

    /**
     * 批量删除编码
     * @param codeParamVos
     */
    void deleteBatchByIds(List<CodeParamVo> codeParamVos);

    /**
     * 创建产品编码
     *
     * @param loginInfo
     * @param codeVos
     * @param userVo
     * @return
     */
    Map<String, List<Long>> saveProductTemporaryCode(AccounLoginInfo loginInfo, List<CodeVo> codeVos, OrderUserVo userVo);

    /**
     * 创建出入库配件的临时一物一码
     * @param loginInfo
     * @param outStore 是否出库：false-入库，true-出库
     * @param outInBoundNo 出入库单号
     * @param codeVos
     * @return
     */
    Map<String, List<ZjCode>> saveSpareTemporaryCode(AccounLoginInfo loginInfo, boolean outStore, String outInBoundNo, List<CodeVo> codeVos);


    /**
     * 编码登记
     * @param loginInfo
     * @param orderGoodsVos
     * @param userVo
     */
    void codeRegister(AccounLoginInfo loginInfo, List<OrderGoodsVo> orderGoodsVos, OrderUserVo userVo);

    /**
     * 获取编码登记信息、并查询是否有未登记的
     * @param loginInfo
     * @param orderGoodsVos
     * @param userVo
     */
    void getCodeRegister(AccounLoginInfo loginInfo, List<OrderGoodsVo> orderGoodsVos, OrderUserVo userVo);

    /**
     * 根据编码ID获取编码的历史工单
     * @param codeId 编码ID
     * @param pageUtil 分页
     * @return
     */
    Map<String, Object> getHistoryOrder(Long codeId, PageUtil pageUtil);

    /**
     * 获取未登记商品编码
     * @param custAccId 商家ID
     * @param codeSelectVo 搜索条件
     * @return
     */
    Map<String, Object> getNotRegisterCode(Long custAccId, OrderCodeSelectVo codeSelectVo);


    /**
     * 根据客户ID获取已登记编码
     * @param custAccId 商家ID
     * @param userId 客户ID
     * @param codeSelectVo 搜索条件
     * @return
     */
    Map<String, Object> getRegisterCode(Long custAccId, Long userId, OrderCodeSelectVo codeSelectVo);

    /**
     * 获取在库的一物一码
     * @param custAccId 商家ID
     * @param searchVo 搜索条件
     * @return
     */
    Map<String, Object> getInStoreCodeList(Long custAccId, CodeInStoreListSearchVo searchVo);

    /**
     * 获取未出入库的一物一码
     * @param custAccId 商家ID
     * @param searchVo 搜索条件
     * @return
     */
    Map<String, Object> getStoreCodeList(Long custAccId, CodeInStoreListSearchVo searchVo);

}
